package router

import (
	"oa-system/internal/api/handler"
	"oa-system/internal/api/middleware"
	"oa-system/internal/config"
	"oa-system/internal/database"
	"oa-system/internal/repository"
	"oa-system/internal/service"

	"github.com/gin-gonic/gin"
)

func RegisterMenuRoutes(r *gin.Engine) {
	// 初始化依赖
	menuRepo := repository.NewMenuRepository(database.DB)
	menuService := service.NewMenuService(menuRepo)
	menuHandler := handler.NewMenuHandler(menuService)

	// API 路由组
	api := r.Group(config.GlobalConfig.App.APIPrefix)

	// 菜单路由组
	menuGroup := api.Group("/menus")
	// 开启JWT认证
	menuGroup.Use(middleware.JWTAuthMiddleware())
	{
		// 基础菜单操作
		menuGroup.GET("/", menuHandler.GetAllMenus)
		menuGroup.POST("", menuHandler.CreateMenu)
		menuGroup.PUT("/:id", menuHandler.UpdateMenu)
		menuGroup.DELETE("/:id", menuHandler.DeleteMenu)

		// 带角色的菜单操作
		menuGroup.GET("/menusWithRoles", menuHandler.GetAllMenusWithRoles)

		// 用户菜单操作
		menuGroup.GET("/getRoutes", menuHandler.GetUserMenus)

		// 菜单权限操作
		menuGroup.GET("/permissions/:id", menuHandler.GetMenuPermissions)
		menuGroup.POST("/permissions/:id", menuHandler.AddMenuPermissions)
	}
}
